属性和方法注入

尽管构造方法参数注入是一种传值给组件的首选的方法, 但你同样可以使用属性或方法注入来传值.

属性注入 使用可写属性而不是构造方法参数来完成注入. 方法注入 通过调用方法来设置依赖.

属性注入

如果组件是一个 lambda表达式组件, 使用对象构造器:

builder.Register(c => new A { B = c.Resolve<B>() });

为了支持 循环依赖, 可以使用 激活后事件处理程序(activated event handler):

builder.Register(c => new A()).OnActivated(e => e.Instance.B = e.Context.Resolve<B>());

如果组件是一个 反射组件, 使用 PropertiesAutowired() 修饰语来注入属性:

builder.RegisterType<A>().PropertiesAutowired();

如果你需要绑定一个特定的属性和它的值, 使用 WithProperty() 修饰语:

builder.RegisterType<A>().WithProperty("PropertyName", propertyValue);

方法注入

想要调用一个方法来设置组件上的某个值, 最简单的方法是使用 lambda表达式组件 然后在activator中进行正确的方法调用:

builder.Register(c => {
  var result = new MyObjectType();
  var dep = c.Resolve<TheDependency>();
  result.SetTheDependency(dep);
  return result;
});

如果你没法使用注册lambda表达式, 你可以添加一个 激活时事件处理程序(activating event handler):

builder
  .Register<MyObjectType>()
  .OnActivating(e => {
    var dep = e.Context.Resolve<TheDependency>();
    e.Instance.SetTheDependency(dep);
  });